package com.ane.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.Map;

/**
 * <p>功能描述：Json类型转换帮助类</p>
 * @author yuy
 * @version 1.0 2015-12-31 下午4:03:22
 */
public class JsonUtil {
	
	public static String getJsonArrayResult(String resultType, String serverCode, String resultInfo,String jsonArrayString,JSONArray jsonArray) {
		JSONObject jsonObj = new JSONObject();
		jsonObj.put("resultType", resultType);
		jsonObj.put("serverCode",serverCode);
		jsonObj.put("resultInfo", resultInfo);
		jsonObj.put(jsonArrayString, jsonArray);
		return jsonObj.toString();
	}
	public static String getJsonObjectResult(String resultType, String serverCode, String resultInfo,String jsonObjectString,JSONObject jsonObject) {
		JSONObject jsonObj = new JSONObject();
		jsonObj.put("resultType", resultType);
		jsonObj.put("serverCode",serverCode);
		jsonObj.put("resultInfo", resultInfo);
		jsonObj.put(jsonObjectString, jsonObject);
		return jsonObj.toString();
	}
	
	public static String getJsonResult(Integer error, String serverCode, String info, int curentPage, 
			int pagesize, int count, JSONArray jsonArray) {
		JSONObject jsonObj = new JSONObject();
		jsonObj.put("error", error);
		jsonObj.put("result", getPageInfoJson(serverCode, curentPage, pagesize, count, jsonArray));
		jsonObj.put("serverCode", serverCode);
		jsonObj.put("info", info);
		return jsonObj.toString();
	}
	
	public static JSONObject getPageInfoJson(String serverCode, int curentPage, int pagesize, int count, JSONArray jsonArray) {
		JSONObject pageInfo = new JSONObject();
		pageInfo.put("pagesize", pagesize);
		pageInfo.put("curentpage", curentPage);
		pageInfo.put("count", count);
		
		if(null == jsonArray || jsonArray.size()==0){
			jsonArray = new JSONArray();
		}
		switch (Integer.parseInt(serverCode)) {
		case 100201:
			pageInfo.put("configinfos", jsonArray);
			break;
		case 100301:
			pageInfo.put("customerinfos", jsonArray);
			break;
		case 100302:
			pageInfo.put("customerlikeinfos", jsonArray);
			break;
		case 100303:
			pageInfo.put("customerlikeinfos", jsonArray);
			break;
		case 100401:
			pageInfo.put("countryinfos", jsonArray);
			break;
		case 100402:
			pageInfo.put("provinceinfos", jsonArray);
			break;
		case 100403:
			pageInfo.put("cityinfos", jsonArray);
			break;
		case 100404:
			pageInfo.put("countyinfos", jsonArray);
			break;
		case 100405:
			pageInfo.put("addressmatch", jsonArray);
			break;
		case 100406:
			pageInfo.put("towninfos", jsonArray);
			break;
		case 100501:
			pageInfo.put("dictinfos", jsonArray);
			break;
		case 100601:
			pageInfo.put("employeeinfos", jsonArray);
			break;
		case 100701:
			pageInfo.put("siteinfos", jsonArray);
			break;
		case 100702:
			pageInfo.put("siterangeinfos", jsonArray);
			break;
		case 100801:
			pageInfo.put("ecwerhouseinfos", jsonArray);
			break;
		case 100901:
			pageInfo.put("limitsiteinfos", jsonArray);
			break;
		case 101001:
			pageInfo.put("ruleinfos", jsonArray);
			break;
		case 101101:
			pageInfo.put("moneyinfos", jsonArray);
			break;
		case 101201:
			pageInfo.put("menuinfos", jsonArray);
			break;
		case 101301:
			pageInfo.put("serversinfos", jsonArray);
			break;
		case 101401:
			pageInfo.put("problemtypeinfos", jsonArray);
			break;
		case 101501:
			pageInfo.put("userexportinfos", jsonArray);
			break;
		case 101601:
			pageInfo.put("orderformatresult", jsonArray);
			break;
		case 101701:
			pageInfo.put("amountresult", jsonArray);
			break;
		case 101801:
			pageInfo.put("calcamountinfos", jsonArray);
			break;
		
		case 200101:
			pageInfo.put("waybillist", jsonArray);
			break;
		case 200102:
			pageInfo.put("ewbuploaddocking", jsonArray);
			break;
		case 200103:
			pageInfo.put("storagecheck", jsonArray);
			break;
		case 200201:
			pageInfo.put("receiveresult", jsonArray);
			break;
		case 200301:
			pageInfo.put("arriveresult", jsonArray);
			break;
		case 200302:
			pageInfo.put("yfarriveresult", jsonArray);
			break;
		case 200303:
			pageInfo.put("checkinfos", jsonArray);
			break;
		case 200304:
			pageInfo.put("priorsiteinfos", jsonArray);
			break;
		case 200401:
			pageInfo.put("sendresult", jsonArray);
			break;
		case 200402:
			pageInfo.put("yfsendresult", jsonArray);
			break;
		case 200501:
			pageInfo.put("stayresult", jsonArray);
			break;
		case 200601:
			pageInfo.put("dispatchresult", jsonArray);
			break;
		case 200701:
			pageInfo.put("signresult", jsonArray);
			break;
		case 200801:
			pageInfo.put("selfresult", jsonArray);
			break;
		case 200901:
			pageInfo.put("probleminfos", jsonArray);
			break;
		case 201001:
			pageInfo.put("transinfos", jsonArray);
			break;
		case 201101:
			pageInfo.put("picresult", jsonArray);
			break;
		case 201202:
			pageInfo.put("orderpageresult", jsonArray);
			break;
		default:
			pageInfo.put("defaultinfos", jsonArray);
			break;
		}
		return pageInfo;
	}
	public static String obj2json(Object obj) throws Exception {
		return JSON.toJSONString(obj);
	}
	
	public static <T> T json2obj(String jsonStr, Class<T> clazz) throws Exception {
		return JSON.parseObject(jsonStr, clazz);
	}
	
	public static <T> Map<String, Object> json2map(String jsonStr) throws Exception {
		return JSON.parseObject(jsonStr, Map.class);
	}
	
	public static <T> T map2obj(Map<?, ?> map, Class<T> clazz) throws Exception {
		return JSON.parseObject(JSON.toJSONString(map), clazz);
	}
}
